﻿using ARC.Yunpian.SMSService.Models.SimpleSmsModels;
using System.Collections.Generic;

namespace ARC.Yunpian.SMSService.Interfaces
{
    public interface ISimpleSms
    {
        /// <summary>
        /// 逐条发送短信
        /// </summary>
        /// <param name="mobile">单条手机号</param>
        /// <param name="text">发送内容</param>
        /// <param name="extend">下发号码扩展号，纯数字</param>
        /// <param name="uid">该条短信在您业务系统内的 ID</param>
        /// <param name="callback_url">短信发送后将向这个地址推送(运营商返回的)</param>
        /// <param name="register">是否为注册验证码短信，如果传入 true，</param>
        /// <param name="mobile_stat">若短信中包含云片短链接，此参数传入 true 将会把短链接替换为目标手机号的专属链接，用于统计哪些号码的机主点击了短信中的链接，可在云片后台查看</param>
        /// <returns></returns>
        public SendSimpleResponse SendSmsOne(string mobile, string text, string extend = "", string uid = "", string callback_url = "", bool register = false,
            bool mobile_stat = true);
        /// <summary>
        /// 批量发送短信
        /// </summary>
        /// <param name="mobile">发送多个手机号请以英文逗号分隔，</param>
        /// <param name="text">发送内容</param>
        /// <param name="extend">下发号码扩展号，纯数字</param>
        /// <param name="uid">该条短信在您业务系统内的 ID</param>
        /// <param name="callback_url">短信发送后将向这个地址推送(运营商返回的)</param>
        /// <param name="mobile_stat">若短信中包含云片短链接，此参数传入 true 将会把短链接替换为目标手机号的专属链接，用于统计哪些号码的机主点击了短信中的链接，可在云片后台查看</param>
        /// <returns></returns>
        public SendSimpleBatchResponse SendSmsBatch(string mobile, string text, string extend = "", string uid = "", string callback_url = "", bool mobile_stat = true);
        /// <summary>
        /// 制定模板发送
        /// </summary>
        /// <param name="mobile">接收的手机号，不需要带+86 前缀</param>
        /// <param name="tpl_id">模板 id</param>
        /// <param name="tpl_value">变量名和变量值对。请先对您的变量名和变量值分别进行 urlencode 再传递。使用参考：代码示例。 注：模板中有变量时，变量名和变量值都不能为空，模板中没有变量时，赋值 tpl_value=""</param>
        /// <param name="callback_url">短信发送后将向这个地址推送(运营商返回的)</param>
        /// <param name="extend">扩展号。默认不开放，</param>
        /// <param name="uid">用户自定义唯一 id。</param>
        /// <returns></returns>
        public SendSimpleResponse JustTelempateSendSms(string mobile, string tpl_id, string tpl_value, string callback_url = "", string extend = "",
            string uid = "");
        /// <summary>
        /// 制定模板批量发送
        /// </summary>
        /// <param name="mobile">接收的手机号，不需要带+86 前缀</param>
        /// <param name="tpl_id">模板 id</param>
        /// <param name="tpl_value">变量名和变量值对。请先对您的变量名和变量值分别进行 urlencode 再传递。使用参考：代码示例。 注：模板中有变量时，变量名和变量值都不能为空，模板中没有变量时，赋值 tpl_value=""</param>
        /// <param name="callback_url">短信发送后将向这个地址推送(运营商返回的)</param>
        /// <param name="extend">扩展号。默认不开放，</param>
        /// <param name="uid">用户自定义唯一 id。</param>
        /// <returns></returns>
        public SendSimpleBatchResponse JustTelempateSendSmsBatch(string mobile, string tpl_id, string tpl_value, string callback_url = "", string extend = "",
            string uid = "");
        /// <summary>
        /// 查短信发送记录
        /// </summary>
        /// <param name="start_time">短信发送开始时间</param>
        /// <param name="end_time">短信发送结束时间</param>
        /// <param name="mobile">需要查询的手机号</param>
        /// <param name="page_num">页码，默认值为 1</param>
        /// <param name="page_size">每页个数，最大 100 个，默认值为 20</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public QuerySimpleSmsSendedResponse QuerySimpleSms(string start_time, string end_time, string mobile = "",
            int page_num = 1, int page_size = 20, string type = "");
        /// <summary>
        /// 添加普通短信签名
        /// </summary>
        /// <param name="sign">签名内容</param>
        /// <param name="notify">是否短信通知结果，默认 true</param>
        /// <param name="apply_vip">是否申请专用通道，默认 false</param>
        /// <param name="is_only_global">	是否仅发国际短信，默认 false</param>
        /// <param name="industry_type">所属行业，默认“其它”</param>
        /// <param name="prove_type">根据签名内容需要提供的证明文件类型，其中：1：公司营业执照(签名是公司名称)；2：应用商店APP管理后台全屏截图(签名是APP名称)；3：ICP备案截图(签名是网站名称)4：微信公众平台管理界面全屏截图(签名是公众号/小程序名称)5：授权委托书(签名为非本账号实名认证的公司、网站、产品名等)6：商标注册证书/商标软著权证明(签名是商标名称)</param>
        /// <param name="license_url">签名对应的营业执照或其他企业资质的图片文件 URL，URL 由请求方提供</param>
        /// <param name="license_base64">签名对应的资质图片进行 base64 编码格式转换后的字符串。此参数和 license_url 您可以任选一种需要的方式进行传输。若两种参数都传，优先取 license_url。</param>
        /// <returns></returns>
        public AddSimpleSmsSinSuccessResponse AddSimpleSinSms(string sign, long prove_type, string license_url, string license_base64, bool notify = true, bool apply_vip = false,
            bool is_only_global = false, string industry_type = "其它");
        /// <summary>
        /// 获取普通短信签名状态
        /// </summary>
        /// <param name="sign">返回所有包含该内容的签名（模糊匹配），若要获取指定签名可加上符号，如【云片网】</param>
        /// <param name="page_num">页码，1 开始，不带或者格式错误返回全部</param>
        /// <param name="page_size">返回条数，必须大于 0，不带或者格式错误返回全部</param>
        /// <returns></returns>
        public QuerySimpleSmsSinResponse QuerySimpleSinSms(string sign, int page_num, int page_size);
        /// <summary>
        /// 修改签名
        /// </summary>
        /// <param name="old_sign"></param>
        /// <param name="sign"></param>
        /// <param name="prove_type"></param>
        /// <param name="license_url"></param>
        /// <param name="license_base64"></param>
        /// <param name="notify"></param>
        /// <param name="apply_vip"></param>
        /// <param name="is_only_global"></param>
        /// <param name="industry_type"></param>
        /// <returns></returns>
        public AddSimpleSmsSinSuccessResponse ModifySimpleSinSms(string old_sign, string sign, long prove_type, string license_url, string license_base64, bool notify = true, bool apply_vip = false,
            bool is_only_global = false, string industry_type = "其它");
        /// <summary>
        /// 添加普通短信模板
        /// </summary>
        /// <param name="tpl_content">模板内容，必须以带符号【】的签名开头</param>
        /// <param name="notify_type">审核结果短信通知的方式。其中:0 表示需要通知,默认;1 表示仅审核不通过时通知;2 表示仅审核通过时通知;3 表示不需要通知；</param>
        /// <param name="website">验证码类模板对应的官网注册页面，验证码类模板必填</param>
        /// <param name="tplType">1 代表验证码类模板，验证码类模板必填</param>
        /// <param name="callback">审核结果会向这个地址推送</param>
        /// <param name="apply_description">说明模板的发送场景和对象</param>
        /// <returns></returns>
        public AddAndDeleteSimpleSmsTelResponse AddSimpleTelelempleSms(string tpl_content, int notify_type = 0, string website = "", int tplType = 0, string callback = "", string apply_description = "");
        /// <summary>
        /// 删除普通短信模板
        /// </summary>
        /// <param name="tpl_id">模板 id，64 位长整形。指定 id 时返回 id 对应的模板。未指定时返回所有模板</param>
        /// <returns></returns>
        public AddAndDeleteSimpleSmsTelResponse DeleteSimpleTelemplateSms(long tpl_id);
        /// <summary>
        /// 修改模板
        /// </summary>
        /// <param name="tpl_id"></param>
        /// <param name="tpl_content"></param>
        /// <param name="notify_type"></param>
        /// <param name="website"></param>
        /// <param name="tplType"></param>
        /// <param name="callback"></param>
        /// <param name="apply_description"></param>
        /// <returns></returns>
        public AddAndDeleteSimpleSmsTelResponse ModifySimpleTelelempleSms(long tpl_id, string tpl_content, int notify_type = 0, string website = "", int tplType = 0, string callback = "", string apply_description = "");
        /// <summary>
        /// 查询所有模板
        /// </summary>
        /// <returns></returns>
        public List<QuerySimpleSmsTelTplIdResponse> QuerySimpleTeleplateSms();
        /// <summary>
        /// 制定模板查询状态
        /// </summary>
        /// <param name="tpl_id"></param>
        /// <returns></returns>
        public QuerySimpleSmsTelTplIdResponse QuerySimpleTeleplateSms(long tpl_id);
    }
}
